package com.wzs.web.listener;

import com.wzs.setting.domain.DicValue;
import com.wzs.setting.service.DicValueService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class SysInitListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {
        /*
         * 注意：在自定义 listener 中如果需要使用 spring 容器中的 bean ，不可以直接  @Autowired
         * (1) Listener的生命周期是由servlet容器（例如tomcat）管理的，
         * 项目启动时上例中的ConfigListener是由servlet容器实例化并调用其contextInitialized方法，
         * 而servlet容器并不认得@Autowired注解，因此导致ConfigService实例注入失败
         *
         * (2) 而spring容器中的bean的生命周期是由spring容器管理的
         *
         * (3)处理数据字典的监听器一定要放在创建spring容器的监听器之后,因为监听器中需要调用spring容器中的bean对象
         * */
        System.out.println("服务器缓存处理数据字典开始");
        ServletContext application = event.getServletContext();
        //
        String config = "applicationContext.xml";
        ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
        DicValueService dicValueService = (DicValueService) ctx.getBean("dicValueService");

        Map<String, List<DicValue>> map = dicValueService.getAll();
        Set<String> set = map.keySet();
        for (String key : set) {
            application.setAttribute(key, map.get(key));
        }


    }

    public void contextDestroyed(ServletContextEvent event) {

        System.out.println("上下文域对象被销毁了");
    }
}
